Computers and computer-based devices such as personal computers (PCs), personal digital assistants (PDAs) and other embedded devices currently employ large, often complex, operating systems to execute user programs and process data. Conventional operating systems typically range in size from hundreds of kilobytes for small PDAs to hundreds of megabytes for high-end servers and PCs. To initialize or reset a computer or processor, a boot process is performed using system software and/or firmware.
Firmware refers to processor routines that are stored in non-volatile structures such as read only memories (ROMs), flash memories, and the like. These memory structures preserve the code stored in them, even when power is turned off. One of the principle uses of firmware is to provide routines that control a computer system when it is powered up from a shut down state, before volatile memory structures have been tested and configured. The process by which a computer is brought to its operating state from a powered down or powered off state is referred to as bootstrapping. Firmware routines may also be used to reinitialize or reconfigure the computer system following various hardware events and to handle certain platform level events like system interrupts.
The bootstrapping process typically begins with a processor(s) in a computer system and proceeds outward to system level resources. Initially, each processor tests its internal components and interfaces. In multi-processor systems, a single bootstrap processor is usually selected to handle initialization procedures for the system as a whole. These procedures include checking the integrity of memory, identifying and initializing other resources in the computer system, loading the operating system into memory, and initializing the remaining processors. Since volatile memory structures such as caches and random access memory (RAM) are not dependable until later in the boot process, the processor implements some of its early firmware routines for the various bootstrapping procedures inside nonvolatile memory such as flash devices. One advantage of using flash devices is that they can be quickly reprogrammed without being removed form the system. The flash memory, by virtue of its electrical programmability and erasability, is easily updated under system software control while being physically connected to the computer motherboard.
Typically, many processors in a computer system may have their own flash devices for storing, amongst other things, bootstrapping procedures. One problem with these systems is the cost and board space needed to provide all of these flash devices including their support hardware and sockets. Another problem may occur if the bootstrapping procedure needs to be changed. If the bootstrapping procedure is changed, a user must make sure that the procedure has been changed in all of the flash devices, or else the system may not initializes correctly.
Accordingly, it is desirable to provide a method and apparatus for bootstrapping a plurality of processors from a single flash device so as to save costs and board space while ensuring the ease of updating changes to the bootstrapping procedure.